//Author Bertels Nick [c1019387] 
package core.logic.dataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import core.logic.services.utilServices.ConnectionService;
import core.models.domainModel.Passagier;
import core.models.domainModel.Zitplaats;

public class ZitplaatsDAO {

	public static int insertZitplaatsen(ArrayList<Zitplaats> zList) // @Author: Nick Bertels
	{
		int ok = 0;
		String sql = "INSERT INTO Zitplaats (ZitplaatsNaam, ZitplaatsType, VluchtId) VALUES ";
		Connection con;

			try 
			{
				con = ConnectionService.getConnection();
				
				
				for (Zitplaats z : zList) 
				{
					sql += "(?,?,?), ";

				}
				sql = sql.substring(0, sql.length() - 2);
				PreparedStatement pst = con.prepareStatement(sql);
				int paramCount = 1;
				
				for (Zitplaats z : zList) 
				{
					pst.setString(paramCount, z.getZitplaatsNaam());
					paramCount++;
					pst.setString(paramCount, z.getZitplaatsType());
					paramCount++;
					pst.setInt(paramCount, z.getVlucht().getVluchtId());
					paramCount++;
				}
				
				ok = pst.executeUpdate();
				pst.close();
			} catch (SQLException ex) 
			{
				ex.printStackTrace();
			}
		
		return ok;
	}

	public static ArrayList<Zitplaats> getVrijeZitplaatsenByVluchtEnZitplaatstype(Passagier p) // @Author: Gerrit Beyens
	{
		ArrayList<Zitplaats> z = new ArrayList<Zitplaats>();
		String sql = "SELECT zitplaats.*"
				+ " FROM Zitplaats LEFT OUTER JOIN Passagier ON (Zitplaats.ZitplaatsId = Passagier.zitplaatsId)"
				+ " WHERE Passagier.zitplaatsId IS NULL AND Zitplaats.VluchtId = ? AND Zitplaats.Zitplaatstype = ?";
		Connection con;
		ResultSet rs = null;
		PreparedStatement pst = null;
		try {
			con = ConnectionService.getConnection();
			pst = con.prepareStatement(sql);
			pst.setInt(1,  p.getVlucht().getVluchtId());
			pst.setString(2, p.getBookingType());
			rs = pst.executeQuery();
			while (rs.next()) {
				Zitplaats zp = new Zitplaats(rs.getInt("zitplaatsId"),
						rs.getString("zitplaatsNaam"),
						rs.getString("zitplaatsType"), rs.getInt("vluchtId"));
				z.add(zp);
			}
		} catch (SQLException sqlex) {
			sqlex.getStackTrace();
		}

		return z;
	}
	
	
	//Y.laenen
	//27/12
	public static Zitplaats getZitplaatsById(int id)
	{
		Zitplaats zp = null;
		String sql = "SELECT * FROM Zitplaats WHERE ZitplaatsId = ?";		
		
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql);
			pst.setInt(1, id);
			ResultSet rs = pst.executeQuery();

			while (rs.next())
			{
				zp = new Zitplaats(id,
						rs.getString("zitplaatsNaam"),
						rs.getString("zitplaatsType"), rs.getInt("vluchtId"));
			}
		
		}
		catch (SQLException sqlex)
		{
			JOptionPane.showMessageDialog(null, sqlex.getMessage());
		}
		return zp;
	}
	

}
